home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / nrpas13.arc / CONVLV.DEM < prev    next >
Text File  |  1991-05-01  |  1KB  |  54 lines

  1. PROGRAM d12r6(input,output);
  2. (* driver for routine CONVLV *)
  3. CONST
  4.    n=16;      (* data array size *)
  5.    m=9;      (* response function dimension - must be odd *)
  6.    n2p2=34;      (* n2=2*n+2 *)
  7.    pi=3.14159265;
  8. TYPE
  9.    glnarray = ARRAY [1..n] OF real;
  10.    gln2array = ARRAY [1..n2p2] OF real;
  11.    gl2narray = gln2array;
  12.    gldarray = gln2array;
  13. VAR
  14.    i,isign,j : integer;
  15.    cmp : real;
  16.    ans : gln2array;
  17.    data,respns,resp : glnarray;
  18.  
  19. (*$I MODFILE.PAS *)
  20. (*$I FOUR1.PAS *)
  21.  
  22. (*$I TWOFFT.PAS *)
  23.  
  24. (*$I REALFT.PAS *)
  25.  
  26. (*$I CONVLV.PAS *)
  27.  
  28. BEGIN
  29.    FOR i := 1 to n DO BEGIN
  30.       data[i] := 0.0;
  31.       IF ((i >= ((n DIV 2)-(n DIV 8))) AND
  32.          (i <= ((n DIV 2)+(n DIV 8)))) THEN
  33.          data[i] := 1.0
  34.    END;
  35.    FOR i := 1 to m DO BEGIN
  36.       respns[i] := 0.0;
  37.       IF ((i > 2) AND (i < 7)) THEN respns[i] := 1.0;
  38.       resp[i] := respns[i]
  39.    END;
  40.    isign := 1;
  41.    convlv(data,n,resp,m,isign,ans);
  42. (* compare with a direct convolution *)
  43.    writeln ('i':3,'CONVLV':14,'Expected':13);
  44.    FOR i := 1 to n DO BEGIN
  45.       cmp := 0.0;
  46.       FOR j := 1 to (m DIV 2) DO BEGIN
  47.          cmp := cmp+data[((i-j-1+n) MOD n)+1]*respns[j+1];
  48.          cmp := cmp+data[((i+j-1) MOD n)+1]*respns[m-j+1]
  49.       END;
  50.       cmp := cmp+data[i]*respns[1];
  51.       writeln (i:3,ans[i]:15:6,cmp:12:6)
  52.    END
  53. END.
  54.